观察者模式(也可以叫事件驱动模式)
这个模式由一个问题引出:正在睡觉的小孩醒来了,需要吃东西,监测人马上拿东西来给小孩吃
第一种做法(线程监测法)
    监测人启一个线程每隔一定时间去监测小孩,如果监测到小孩醒了,则喂小孩东西吃(这是现实生活中的常见情况)
程序中的做法(观察者做法)
    小孩醒来后立马通知监测人来喂自己,这时小孩需要有监测人的引用,在醒来的方法中调用监测人的 喂(this) 方法
再扩展一下问题:
    1.这个小孩不仅仅只有一个监测人,比如爸爸在监测,妈妈在监测,爷爷也在监测
    2.小孩不仅只有醒来这个事件,还有哭的事件,笑的事件等等

如果使用之前的做法,那么小孩的类需要不断的做监测人的扩展,监测人需要不断的添加各种类型的事件,小孩的类中也需要不断的增加调用
扩展做法(观察者模式)
所以抽象出一个观察者的类,监测人统一称之为观察者,而小孩统一为被观察者
   被观察者有一个方法来注册观察者,持有一个集合来保存所有的观察者,当被观察的对象发生变更时,以事件的方式通知观察者
   小孩的醒来被看做是一个事件对象,监测人都会持有一个公共的方法,就是当事件发生时的动作
事件类的设计
    事件名称,来源(被观察者)
